<?php


namespace wechat;


class Wx{

    public function volid(){
//        判断它里边有没有这个值，有的话就不再请求
        if (isset($_GET['signature']) && isset($_GET['timestamp']) && isset($_GET['nonce']) && isset($_GET['echostr'])) {
            //echo 111;
//1.接受微信服务器上传的get参数
            $signature = $_GET['signature'];
            $timestamp = $_GET['timestamp'];
            $nonce = $_GET['nonce'];
            $echostr = $_GET['echostr'];
//2.接收前台提交的token值
            $token = "hehe";
//3.将制定字符进行字典化排序
            $arr = [$token, $timestamp, $nonce];
            sort($arr);
//4.将三个数组切割成字符串进行sha1加密
            $str = implode($arr);
//file_put_contents('data.php',$str);
            $string = sha1($str);
//file_put_contents('data.php',$string);
            if ($string == $signature) {

                echo $echostr;

            }

        }
    }


//    通过curl获取access_token的值
    /**
     *
     * curl发送请求方法
     *
     * @param $url  请求地址
     * @param array $field 提交的数据
     * @return string
     */
    public function curl($url, $field = [])
    {
        //初始化curl
        $ch = curl_init();
        //设置curl参数
        //设置请求地址
        curl_setopt($ch, CURLOPT_URL, $url);
        //设置接收返回结果,但不直接展示在界面
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        //设置禁止证书校验
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        //判断是否为post请求
        if (!empty($field)) {
            //定义超时时间
            curl_setopt($ch, CURLOPT_TIMEOUT, 30);
            //开启post请求
            curl_setopt($ch, CURLOPT_POST, 1);
            //传递post数据
            curl_setopt($ch, CURLOPT_POSTFIELDS, $field);
        }

        //发送请求,定义一个变量接收请求结果
        $data = '';
        //发送请求可能失败,所以我需要判断,如果请求成功,将请求结果赋值给$data,反之,不给$data赋值
        if (curl_exec($ch)) {
            $data = curl_multi_getcontent($ch);
        }
        //关闭curl
        curl_close($ch);
        //返回接收到的数据
        return $data;
    }


//    获得access_token的值，主要是用来开发用户，管理用户，回复用户消息，自定义菜单啥的
    public function getAccessToken(){
        $dir = __DIR__.'/cache';
        is_dir($dir) || mkdir($dir);
        $filename = $dir.'/token'.md5('wx0ca46d43cd5656ea').'.php';
        if (is_file($filename) && filemtime($filename)+7100>time()){
            $data = include $filename;
        }else{
            $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx6a77a343ad158f41&secret=2a54fe808edd81706cf8c8ab63519141';
            $data = $this->curl($url);
            $data = json_decode($data,true);
            if (isset($data['errcode'])){
                return false;
            }
            file_put_contents($filename,"<?php return " . var_export($data,true).";\n?>");
        }

        return $data['access_token'];
    }

//        js_sdk是调取微信提供给我们的接口，地图啦，微信摇一摇啦，录音啥的,和access_token差不多
//        jsapi_ticket也是很宝贵的，我们要珍惜，把它保存起来,你拿上这个东西才可以调用微信的接口
        public function getJs_SDK(){
//            先定义文件路径，再定义文件名称
            $dir = __DIR__.'/cache';
            is_dir($dir) || mkdir($dir);
            $filename = $dir.'/ticket'.md5('wx0ca46d43cd5656ea').'.php';
//            判断文件是否过期，如果没有过期就直接调用，过期就重新获取
            if (is_file($filename) && filemtime($filename)+7100>time()){

                $data = include $filename;
            }else{
//                根据文档写
                $url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='.$this->getAccessToken().'&type=jsapi';
                $data = $this->curl($url);
                $data = json_decode($data,true);
//                因为他成功后会返回errcode：0
                if ($data['errcode']!=0){

                    return false;

                }else{
                    file_put_contents($filename,"<?php return " . var_export($data,true).";\n?>");
                }
            }
            return $data['ticket'];
        }

}



?>